package com.lh.tams.controller;

import java.util.Calendar;
import java.util.Date;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.lh.tams.controller.qo.CaseQo;
import com.lh.tams.controller.vo.CaseAllDetail;
import com.lh.tams.domain.TamsCase;
import com.lh.tams.domain.TamsCommon;
import com.lh.tams.domain.TamsDept;
import com.lh.tams.domain.TamsPerson;
import com.lh.tams.service.CaseService;
import com.lh.tams.service.input.ImportCase;
import com.lh.tams.util.Constants;
import com.lh.tams.util.DataGridModel;
import com.lh.tams.util.DateUtil;
import com.lh.tams.util.ID;
import com.lh.tams.util.Page;
import com.lh.tams.util.Status;
import com.lh.tams.util.diy.Json;

@RequestMapping("/case")
@Controller
public class CaseController {
	private CaseService caseService;
	private ImportCase importCase;

	public void setCaseService(CaseService caseService) {
		this.caseService = caseService;
	}
	
	public void setImportCase(ImportCase importCase) {
		this.importCase = importCase;
	}

	/**
	 * 根据Qo查询案件
	 * @param session
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/query.adm")
	@ResponseBody
	public Page query(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson inPerson= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(inPerson.getTamsRole().getRoleType()==Status.SYSTEM_ROLE||inPerson.getTamsRole().getRoleType()==Status.DA_LEADER_ROLE){
			return caseService.queryForCase(dgm, caseQo);
		}
		if(inPerson!=null){
			caseQo.setInPerson(inPerson.getIdBgt());//在查询参数中设置接警人的ID
		}
		return caseService.queryForCase(dgm, caseQo);
	}
	
	/**
	 * 根据Qo统计案件
	 * @param session
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/count.adm")
	@ResponseBody
	public Page count(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson inPerson= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(inPerson.getTamsRole().getRoleType()==Status.SYSTEM_ROLE||inPerson.getTamsRole().getRoleType()==Status.DA_LEADER_ROLE){
			return caseService.queryForCount(dgm, caseQo);
		}
		if(inPerson!=null){
			if(inPerson.getTamsRole().getRoleType()==Status.ZHONG_LEADER_ROLE){
				caseQo.setInDept(inPerson.getTamsDept().getIdBgt());//设置部门
			}else{
				caseQo.setInPerson(inPerson.getIdBgt());//在查询参数中设置接警人的ID	
			}
		}
		return caseService.queryForCount(dgm, caseQo);
	}
	
	/**
	 * 案件查询模块中   根据Qo查询案件
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/queryCase.adm")
	@ResponseBody
	public Page queryCase(DataGridModel dgm,CaseQo caseQo,String flag){
		return caseService.queryCase(dgm, caseQo, flag);
	}
	
	/**
	 * 案件监督模块中   根据Qo查询案件
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/caseControl.adm")
	@ResponseBody
	public Page caseControl(DataGridModel dgm,CaseQo caseQo,String flag){
		return caseService.caseControl(dgm, caseQo, flag);
	}
	
	
	/**
	 * 根据caseNo查询案件详情
	 * @param caseNo
	 * @return
	 */
	@RequestMapping("/detail.adm")
	@ResponseBody
	public TamsCase detail(String caseNo){
		return caseService.query(caseNo);
	}
	
	/**
	 * 根据caseNo查询一般案件记录
	 * @param caseNo
	 * @return
	 */
	@RequestMapping("/queryCommon.adm")
	@ResponseBody
	public TamsCommon queryCommon(String caseNo){
		return caseService.queryCommon(caseNo);
	}
	
	/**
	 * 立案模块中根据Qo查询案件
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/queryRegister.adm")
	@ResponseBody
	public Page queryRegister(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson person= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(person.getTamsRole().getRoleType()==Status.SYSTEM_ROLE){
			return caseService.queryRegister(dgm, caseQo,0);
		}
		return caseService.queryRegister(dgm, caseQo,person.getIdBgt());
	}
	
	/**
	 * 鉴定模块中根据Qo查询案件
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/queryIdentify.adm")
	@ResponseBody
	public Page queryIdentify(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson person= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(person.getTamsRole().getRoleType()==Status.SYSTEM_ROLE){
			return caseService.queryIdentify(dgm, caseQo,0);
		}
		return caseService.queryIdentify(dgm, caseQo,person.getIdBgt());
	}
	
	/**
	 * 认定模块中根据Qo查询案件
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/queryConfirm.adm")
	@ResponseBody
	public Page queryConfirm(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson person= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(person.getTamsRole().getRoleType()==Status.SYSTEM_ROLE){
			return caseService.queryConfirm(dgm, caseQo,0);
		}
		long personId=-1;
		if(person!=null){
			if(person.getTamsRole().getRoleType()!=Status.ZHONG_LEADER_ROLE){
				caseQo.setOutPerson(person.getIdBgt());//在查询参数中设置出警人的ID
				personId=person.getIdBgt();
			}else{
				caseQo.setOutDept(person.getTamsDept().getIdBgt());//中队领导可以看到本部门下的所有案件
			}
		}
		return caseService.queryConfirm(dgm, caseQo, personId);
	}
	/**
	 * 案件详情确认内容查询
	 * @param caseNo
	 * @return
	 */
	@RequestMapping("/queryConfirmContent.adm")
	@ResponseBody
	public String queryConfirmContent(String caseNo){
		return caseService.queryConfirm(caseNo);
	}
	
	/**
	 * 调解模块中根据Qo查询案件
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/queryDeal.adm")
	@ResponseBody
	public Page queryDeal(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson person= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(person.getTamsRole().getRoleType()==Status.SYSTEM_ROLE){
			return caseService.queryDeal(dgm, caseQo,0);
		}
		return caseService.queryDeal(dgm, caseQo, person.getIdBgt());
	}
	
	/**
	 * 归档模块中根据Qo查询案件
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/queryRecord.adm")
	@ResponseBody
	public Page queryRecord(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson person= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(person.getTamsRole().getRoleType()==Status.SYSTEM_ROLE){
			return caseService.queryRecord(dgm, caseQo,0);
		}
		return caseService.queryRecord(dgm, caseQo, person.getIdBgt());
	}
	/**
	 * 审批模块中根据Qo查询案件
	 * @param dgm
	 * @param caseQo
	 * @return
	 */
	@RequestMapping("/queryCheck.adm")
	@ResponseBody
	public Page queryCheck(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson person= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(person.getTamsRole().getRoleType()==Status.SYSTEM_ROLE||person.getTamsRole().getRoleType()==Status.DA_LEADER_ROLE){
			return caseService.queryForCheck(dgm, caseQo);
		}
		//利用person的部门，查询该部门下的所有需审批案件
		caseQo.setOutDept(person.getTamsDept().getIdBgt());
		return caseService.queryForCheck(dgm, caseQo);
	}
	
	/**
	 * 
     * 查询分配给本出警人的案件
	 */
	@RequestMapping("/queryOutCase.adm")
	@ResponseBody
	public Page queryOutCase(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson outPerson= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(outPerson.getTamsRole().getRoleType()==Status.SYSTEM_ROLE){
			return caseService.queryForOut(dgm, caseQo);
		}
		if(outPerson!=null){
			if(outPerson.getTamsRole().getRoleType()!=Status.ZHONG_LEADER_ROLE)
				caseQo.setOutPerson(outPerson.getIdBgt());//在查询参数中设置出警人的ID
			else
				caseQo.setOutDept(outPerson.getTamsDept().getIdBgt());//中队领导可以看到本部门下的所有案件
		}
		return caseService.queryForOut(dgm, caseQo);
	}
	
	/**
	 * 
     * 查询分配给重案人员的案件
	 */
	@RequestMapping("/queryMajorCase.adm")
	@ResponseBody
	public Page queryMajorCase(HttpSession session,DataGridModel dgm,CaseQo caseQo){
		TamsPerson majorPerson= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		if(majorPerson.getTamsRole().getRoleType()==Status.SYSTEM_ROLE){
			return caseService.queryForOut(dgm, caseQo);
		}
		if(majorPerson!=null){
			caseQo.setMajorPerson(majorPerson.getIdBgt());//在查询参数中设置出警人的ID
		}
		return caseService.queryForOut(dgm, caseQo);
	}
	/**
	 * 案件受理新增
	 * @param session
	 * @param tamsCase
	 * @param outDept
	 * @param outPerson
	 * @return
	 */
	@RequestMapping("/add.adm")
	@ResponseBody
	public Json add(HttpSession session, TamsCase tamsCase,long outDept,long outPerson,String alarmDateString){
		TamsPerson inPerson= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		TamsDept inDept=inPerson.getTamsDept();
		
//		//临时设置一个接警人的信息
//		if(inPerson==null){
//			inPerson=new TamsPerson();
//			inPerson.setIdBgt(1000);
//			
//		}
//		if(inDept==null){
//			inDept=new TamsDept();
//			inDept.setIdBgt(100);
//		}
			
		tamsCase.setIdBgt(ID.next());//设置ID
		tamsCase.setCaseNo(ID.orderID());//设置案件编码
		if(alarmDateString==null || alarmDateString.equals("")){
			tamsCase.setAlarmDate(new Date());//案件受理时间
		}else{
			tamsCase.setAlarmDate(DateUtil.ymdhms2Date(alarmDateString));
		}
		tamsCase.setCheckType(Status.CHECK_TYPE_NO);
		tamsCase.setDealType(Status.CASE_DEAL_NO);//处理类型不确定
		tamsCase.setDistributeStatus(Status.CASE_DISTRIBUTE_NO);//未分配
		tamsCase.setTamsDeptByInDept(inDept);//设置当前登录的警员的部门
		tamsCase.setTamsPersonByInPerson(inPerson);//设置当前登录的警员
		if(outDept>0){
			TamsDept dept=new TamsDept();
			dept.setIdBgt(outDept);
			tamsCase.setTamsDeptByOutDept(dept);
		}
		if(outPerson>0){
			TamsPerson person=new TamsPerson();
			person.setIdBgt(outPerson);
			tamsCase.setTamsPersonByOutPerson(person);
		}
		caseService.add(tamsCase);//调用service添加
		return new Json();
	}
	
	/**
	 * 案件受理修改
	 * @param session
	 * @param tamsCase
	 * @param outDept
	 * @param outPerson
	 * @return
	 */
	@RequestMapping("/update.adm")
	@ResponseBody
	public Json update(HttpSession session,TamsCase tamsCase,long outDept,long outPerson,String alarmDateString){
		TamsPerson inPerson= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		TamsDept inDept=inPerson.getTamsDept();
		
//		//临时设置一个接警人的信息
//		if(inPerson==null){
//			inPerson=new TamsPerson();
//			inPerson.setIdBgt(1000);
//			inDept.setIdBgt(100);
//		}
		tamsCase.setTamsDeptByInDept(inDept);
		tamsCase.setTamsPersonByInPerson(inPerson);
		tamsCase.setAlarmDate(DateUtil.ymdhms2Date(alarmDateString));
		
		if(outDept>0){
			TamsDept dept=new TamsDept();
			dept.setIdBgt(outDept);
			tamsCase.setTamsDeptByOutDept(dept);
		}
		if(outPerson>0){
			TamsPerson person=new TamsPerson();
			person.setIdBgt(outPerson);
			tamsCase.setTamsPersonByOutPerson(person);
		}
		caseService.update(tamsCase);//调用service添加
		return new Json();
	}
	
	/**
	 * 案件受理删除
	 * @param id
	 * @return
	 */
	@RequestMapping("/del.adm")
	@ResponseBody
	public Json delete(long[] id){
		caseService.delete(id);
		return new Json();
	}
	/**
	 * 案件分类
	 * @param idBgt
	 * @param dealType
	 * @return
	 */
	@RequestMapping("/fenLei.adm")
	@ResponseBody
	public Json fenLei(long idBgt,int dealType,int checkType,String recordId){
		caseService.fenLei(idBgt, dealType ,checkType,recordId);
		return new Json();
	}
	/**
	 * 案件审批
	 * @param idBgt
	 * @param check
	 * @param checkRemark
	 * @return
	 */
	@RequestMapping("/check.adm")
	@ResponseBody
	public Json check(long idBgt,String check,String checkRemark){
		caseService.check(idBgt, check, checkRemark);
		return new Json();
	}
	
	/**
	 * 案件催办
	 * @param caseNo
	 * @param urgeDate
	 * @return
	 */
	@RequestMapping("/urge.adm")
	@ResponseBody
	public Json urge(String caseNo,Date urgeDate){
		caseService.urge(caseNo,urgeDate);
		return new Json();
	}
	
	/**
	 * 案件分配
	 * @param idBgt
	 * @param person
	 * @return
	 */
	@RequestMapping("/distribute.adm")
	@ResponseBody
	public Json distribute(long idBgt,long person){
		caseService.distribute(idBgt, person);
		return new Json();
	}
	/**
	 * 案件立案
	 * @param idBgt
	 * @param sureIdentify
	 * @return
	 */
	@RequestMapping("/register.adm")
	@ResponseBody
	public Json register(long idBgt,int sureIdentify,String registerContent){
		caseService.register(idBgt,sureIdentify,registerContent);
		return new Json();
	}
	
	/**
	 * 鉴定
	 * @param caseNo
	 * @param identifyType
	 * @param identifyContent
	 * @return
	 */
	@RequestMapping("/identify.adm")
	@ResponseBody
	public Json identify(HttpSession session,String caseNo,String identifyType,String identifyContent){
		//System.out.println("-----"+identifyContent);
		TamsPerson person= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		caseService.identify(caseNo,identifyType,identifyContent,person);
		return new Json();
	}
	
	/**
	 * 认定
	 * @param caseNo
	 * @param confirmContent
	 * @return
	 */
	@RequestMapping("/confirm.adm")
	@ResponseBody
	public Json confirm(String caseNo,String confirmContent,long personId){
		//System.out.println("-----"+identifyContent);
		//TamsPerson person= (TamsPerson) session.getAttribute(Constants.ADMIN_SESSION_KEY);
		caseService.confirm(caseNo,confirmContent,personId);
		return new Json();
	}
	
	/**
	 * 调解 结案
	 * @param caseNo
	 * @param dealContent
	 * @param personId
	 * @param isSuccess
	 * @return
	 */
	@RequestMapping("/dealAndClose.adm")
	@ResponseBody
	public Json deal(String caseNo,String dealContent,long personId,int isSuccess){
		caseService.deal(caseNo,dealContent,personId,isSuccess);
		return new Json();
	}
	
	/**
	 * 归档
	 * @param caseNo
	 * @param recordContent
	 * @return
	 */
	@RequestMapping("/record.adm")
	@ResponseBody
	public Json record(String caseNo,String recordContent){
		caseService.record(caseNo,recordContent);
		return new Json();
	}
	
	/**
	 * 归档模块中 获取案件的所有流程情况
	 * @param caseNo
	 * @return
	 */
	@RequestMapping("/queryAllDetail.adm")
	@ResponseBody
	public CaseAllDetail queryAllDetail(String caseNo){
		return caseService.queryAllDetail(caseNo);
	}
	
	/**
	 * 导入案件操作 导入昨天的案件信息
	 * @return
	 */
	@RequestMapping("importCase.adm")
	@ResponseBody
	public Json importCase(Date beginTime,Date endTime){
//		Date date=new Date();//今天
//		Calendar c=Calendar.getInstance();
//		c.setTime(date);
//		c.set(Calendar.DATE, c.get(Calendar.DATE)-1);//日期-1
//		c.set(Calendar.HOUR_OF_DAY, 0);
//		c.set(Calendar.MINUTE, 0);
//		c.set(Calendar.SECOND, 0);
		
		importCase.importCase(beginTime,endTime);
		//importCase.importCase(null);
		return new Json();
	}
	
	public static void main(String[] args) {
		Date date=new Date();//今天
		Calendar c=Calendar.getInstance();
		c.setTime(date);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.DATE, c.get(Calendar.DATE)-1);//日期-1
		//c.set(Calendar.HOUR, c.get(Calendar.h));
		
		System.out.println(c.getTime());
	}
	
	/**
	 * 调解申请
	 * @param caseNo
	 * @param dealContent
	 * @return
	 * @throws Exception 
	 */
	@RequestMapping("/dealOrder.adm")
	@ResponseBody
	public Json dealOrder(String caseNo,String dealContent){
		caseService.dealOrder(caseNo,dealContent);
		return new Json();
	}
}
